package com.lesama.object;

import java.util.Objects;

public class Student {
    String name;
    int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{ name = " + name + ", age = " + age + "}.";
    }

    /*@Override
    public boolean equals(Object obj) {
        if (!(obj instanceof Student))
            return false;
        // 将stu向下转型，以调用子类中特有的成员
        Student stu = (Student) obj;
        return this.name.equals(stu.name) && this.age == stu.age;
    }*/

    @Override
    public boolean equals(Object o) {
        // 先判断是否为同一个对象
        if (this == o) return true;
        // 再判断是否为空或者类型不同，getClass返回运行时的类名
        if (o == null || getClass() != o.getClass()) return false;
        // 到这里说明是同一个类型，将o对象向下转型，进行比较
        // Objects.equals会调用对象中重写的equals方法，与对象直接调用equals方法不同的地方在于：
        // Objects.equals会判断a对象为空的情况，而对象直接调用可能出现空指针异常的问题
        // public static boolean equals(Object a, Object b) {
        //        return (a == b) || (a != null && a.equals(b));
        //    }
        Student student = (Student) o;
        return age == student.age && Objects.equals(name, student.name);
    }

}
